package com.cbg.es.service;

import com.cbg.dto.SelectedColListDTO;
import com.cbg.es.dto.EsCategoryDTO;
import com.cbg.es.dto.EsColEditDTO;
import com.cbg.es.dto.EsTableEditDTO;
import com.cbg.es.dto.EsTableListDTO;
import com.cbg.es.vo.CategoryVO;
import com.cbg.vo.CategoryNameVO;
import com.cbg.vo.DirectionsVO;

import java.util.List;

/**
 * @author wangjuzheng
 * @date 2019-10-21
 **/
public interface IEsService {

    /**
     * 全景通查分类和表树的初始化
     *
     * @param categoryType 分类区分（0分类和表树信息 1分类树信息）
     * @return 初始化信息
     */
    List<EsCategoryDTO> getEsCategoryDTOs(int categoryType);

    /**
     * 分类位置的移动
     *
     * @param directionsVO 分类移动VO
     */
    void updateCategoryDirections(DirectionsVO directionsVO);

    /**
     * 分类名称的修改
     *
     * @param categoryNameVO 更新名称vo
     * @return 修改后的分类信息
     */
    EsCategoryDTO updateCategoryName(CategoryNameVO categoryNameVO);

    /**
     * 分类的添加
     *
     * @param categoryVO 分类添加模型
     * @return 添加的分类信息
     */
    EsCategoryDTO addCategory(CategoryVO categoryVO);

    /**
     * 分类添加表
     *
     * @param categoryId 分类id
     * @param tableIds   表id集合
     */
    void addEsTableCategory(Long categoryId, List<Long> tableIds);

    /**
     * 分类的删除
     *
     * @param id 分类id
     */
    void deleteCategory(Long id);

    /**
     * 获取没有选中的表信息
     *
     * @param categoryId 分类id
     * @return 表信息
     */
    List<EsTableListDTO> getEsTables(Long categoryId);

    /**
     * 根据展示关系表id获取列信息
     *
     * @param tableCategoryId 展示关系表id
     * @return 列信息
     */
    List<SelectedColListDTO> selectedTableCategory(Long tableCategoryId);

    /**
     * 表的更新
     *
     * @param categoryId 父级id
     * @param list       表保存DTO
     */
    void saveEsTableCategory(Long categoryId, List<EsTableEditDTO> list);

    /**
     * 所选分类的表信息
     *
     * @param categoryId 父级id
     * @return 表信息
     */
    List<EsTableListDTO> selectedCategory(Long categoryId);

    /**
     * 列的更新
     *
     * @param tableCategoryId 更新列的VO
     * @param list            列信息列表DTO
     */
    void saveEsTableCol(Long tableCategoryId, List<EsColEditDTO> list);

    /**
     * 把表id字符串转换位表id
     *
     * @param categoryTableIdStr 表id字符串
     * @return 表id
     */
    Long formatCategoryTableId(String categoryTableIdStr);
}
